#ifndef MINI_ENGINE_QUEUEFAMILIES
#define MINI_ENGINE_QUEUEFAMILIES
using namespace std;
#include <optional>
#include "PhysicalDevice.h"
#include "WindowSurface.h"

namespace mini_engine
{
    struct QueueFamilyIndices final
    {
        optional<uint32_t> graphicsFamily;
        optional<uint32_t> presentFamily;
        bool isComplete()
        {
            return graphicsFamily.has_value() && presentFamily.value();
        }
    };
    class QueueFamilies
    {
    private:
        QueueFamilies(/* args */);
        static QueueFamilies *m_queueFamilies;
        class QueueFamiliesDestruction
        {
        public:
            ~QueueFamiliesDestruction();
        };

    public:
        static QueueFamilies *getQueueFamilies();
        QueueFamilyIndices findQueueFamilyIndices(VkPhysicalDevice device);
        static QueueFamilyIndices queueFamilyIndices;
        ~QueueFamilies();
    };
}

#endif